// 静态文件目录
// app.use(express.static(path.join(__dirname, '')));
// app.set('view engine', 'hbs');
// app.set('views', path.join(__dirname, 'views'));

const express = require('express');
const path = require('path');
// 是否允许跨域
const cors = require('cors');
const app = express();
const router = express.Router()

// 引入中间件
const { printLog, result, overallError } = require('./utils/middleware')

const { getTokenRule } = require("./common/jwt");
// 引入ws
// require('./utils/webSocket')


// swagger  引入
const expressSwagger = require('express-swagger-generator')(app)
const { options } = require('./utils/swagger')
expressSwagger(options)
// 跨域相关
app.use(cors(
    // {
    // origin: 'http://example.com',
    // methods: ['GET', 'POST'],
    // allowedHeaders: ['Content-Type', 'Authorization'],
    // exposedHeaders: ['Content-Length', 'Authorization'],
    // credentials: true,
    // maxAge: 86400,
    // preflightContinue: false,
    // optionsSuccessStatus: 204
    // }
));



// 创建 res.send 中间件
app.use(result)
// 挂在全局中间件
app.use(printLog)
// // 在路由定义之前使用中间件
// app.use(addTokenToHeader);


// 引入token 校验规则
app.use(getTokenRule()); // jwt 权限设置

// 解析post请求传过来的数据
const bodyParser = require('body-parser')
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json());


// user 接口
const userRouter = require('./router/user')
app.use('/api', userRouter)


// 权限接口
const authorityRouter = require('./router/authority')
app.use('/admin', authorityRouter)


// 定义一个中间件函数，用于查找所有的接口
const checkApiExists = (req, res, next) => {
    const apiPath = req.path;
    const apiExists = router.stack.some(layer => layer.route.path === apiPath);
    if (!apiExists) {
        return res.status(404).json({ message: 'API not found' });
    }
    next();
};



// 有没有这个接口 再去解析token
app.use(checkApiExists);

// 错误中间件 放到最后边
app.use(overallError)



app.listen('3000', function () {
    console.log('成功启动 -----http://localhost:3000/')
})


